以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间，并返回一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间。

// 输入测试：
// [[1,3],[2,6],[8,10],[15,18]]
// [[1,4],[2,3]]
// [[2,3],[4,5],[6,7],[8,9],[1,10]]

// [[1,6],[8,10],[15,18]]
// [[1,4]]
// [[1,10]]


int cmp(const void *a, const void *b) {
    return (*(int **)a)[0] - (*(int **)b)[0];
}

// intervalsColSize变量没有用到
int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){
    int** res = malloc(sizeof(int *)*intervalsSize);
    *returnColumnSizes = malloc(sizeof(int)*intervalsSize);
    int res_cnt = 0;
    qsort(intervals, intervalsSize, sizeof(int *), cmp);

    for (int i = 0; i < intervalsSize; i++) {
        res[res_cnt] = malloc(sizeof(int)*2);
        res[res_cnt][0] = intervals[i][0];
        int right = intervals[i][1];
        while ((i < intervalsSize-1) && right >= intervals[i+1][0]) {
            if (right < intervals[i+1][1]) right = intervals[i+1][1];
            i++;
        }
        //res[res_cnt][1] = intervals[i][1];
        res[res_cnt][1] = right;
        (*returnColumnSizes)[res_cnt] = 2;
        res_cnt++;
    }
    *returnSize = res_cnt;
    return res;
}